package cn.zebra.dev.product.module.cart.service;

import cn.zebra.dev.ibatis.plus.service.IService;
import cn.zebra.dev.product.module.cart.entity.CartEntity;

import java.util.Collection;

/**
 * @author runnable@sina.cn
 */
public interface CartService extends IService<CartEntity> {
    /**
     * 查询用户购物车信息
     *
     * @param userId 用户id
     * @return 购物车信息列表
     */
    Collection<CartEntity> list(Long userId);

    /**
     * 根据用户id与商品id与商品SKUId查找未删除未结算的购物车内容
     *
     * @param userId       用户id
     * @param productId    商品id
     * @param productSkuId 商品SKUId
     */
    CartEntity findByUserIdAndProductIdAndProductSkuId(Long userId, Long productId, Long productSkuId);

    /**
     * 修改购物车数量
     *
     * @param cartId 购物车id
     * @param num    修改后数量
     * @param userId 用户id
     * @return 修改成功返回True 是啊比返回False
     */
    Boolean setNum(Long cartId, Long num, Long userId);

    /**
     * 删除购物车
     *
     * @param cartId 购物车id
     * @param userId 用户id
     * @return 删除成功TRUE 删除失败False
     */
    Boolean deleteCart(Long cartId, Long userId);

    /**
     * 删除购物车
     *
     * @param cartIds 购物车id
     * @param userId  用户id
     * @return 删除成功TRUE 删除失败False
     */
    Boolean deleteCart(Collection<Long> cartIds, Long userId);

    /**
     * 根据多个购物车Id查找购物车列表
     *
     * @param cartIds 购物车id集合
     * @return 购物车列表
     */
    Collection<CartEntity> findByIds(Collection<Long> cartIds);
}
